/* 
 还是使用函数封装，不使用混入方式吧
 然后持久化存储数据，本地缓存和store中即可
 */
import store from '../../store/index.js'
import permision from './permission.js'
let platform = uni.getSystemInfoSync().platform //手机型号
let flag=false
	//参数back true false 判断定位完成后是否返回当前页面的上一页
export async function getLocations(backs=false) {
	let type = platform == 'android' ? 'gcj02' : 'wgs84';
	// let r = false
	// if(platform == 'android'){
	// 	if(backs){
	// 		r = true
	// 	} 
	// } else {
	// 	r = await openGps1()
	// }
	console.log(flag,'flag----');
	if (openGps()|| flag) {
		
		// #ifndef APP-PLUS
		uni.showLoading({
			title:'获取位置中……',
		})
		// #endif
		// #ifdef APP-PLUS
			plus.nativeUI.showWaiting('获取位置中……')
		// #endif
	store.commit('setLatitude','')
	store.commit('setLongitude','')
		uni.getLocation({
			/* 
			 Android端altitude设置为true,要不然定位失败，
			 ios端不需要
			 */
			altitude: platform == 'android' ? true : true,
			type: type,
			geocode: true, //安卓需指定 type 为 gcj02 并配置三方定位SDK。h5端需要逆解析地理位置获取城市
			success: res => {
				console.log(res, '地理位置-------------');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif

				// let location = res.longitude + ',' + res.latitude; //经纬度
				store.commit('setLatitude',res.latitude)
				store.commit('setLongitude',res.longitude)
				plus.nativeUI.toast('获取定位成功！')
				
				/*
				 在选择地址页面，选择完地址需要回到上个页面,更新当前护士地址
				 */
				


				// APP端可以获取详细地址
				/* 
				 IOS端如果设置定位中：如果不授权打开精确位置，则拿不到街道street和streetNum信息。
				 */
				// #ifdef APP-PLUS
					let city = res.address.city; //城市
					let street=res.address.street?res.address.street:''
					let streetNum=res.address.streetNum?res.address.streetNum:''
					
					let address = res.address.district +street +streetNum //详细地址
					console.log(address,'详细地址是');
					let detailAddress=res.address.province+city+res.address.district+address //省市区具体位置(一键报警用到)
					store.commit('setCity',city)
					store.commit('setAddress',address)
					// store.commit('setDetailAddress',detailAddress)
					
					// 用户详细地址，更新护士地址用
					// store.dispatch('updateAddress',detailAddress)
					
					
				// #endif
			},
			fail(err) {
				console.log(err, '获取位置失败了');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				
				if (err.errCode == -1502) {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('网络不畅，请稍后重试')
					 // #endif
				} else {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('获取定位结果错误,请确认是否开启定位权限~')
					 // #endif
					return false
				}
			}
		});
	    return true
	}else{
		// permision.gotoAppPermissionSetting()
		return false
	}
}
// 这个方法不更新经纬度！！
export function getLocation1(mytype) {
	
	let type = platform == 'android' ? 'gcj02' : 'wgs84';

	if (openGps()|| flag) {
		
		// #ifndef APP-PLUS
		uni.showLoading({
			title:'获取位置中……',
		})
		// #endif
		// #ifdef APP-PLUS
			plus.nativeUI.showWaiting('获取位置中……')
		// #endif
		uni.getLocation({
			/* 
			 Android端altitude设置为true,要不然定位失败，
			 ios端不需要
			 */
			altitude: platform == 'android' ? true : true,
			type: type,
			geocode: true, //安卓需指定 type 为 gcj02 并配置三方定位SDK。h5端需要逆解析地理位置获取城市
			success: res => {
				console.log(res, '地理位置-------------');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
	
		
				// #ifdef APP-PLUS
					let city = res.address.city; //城市
				store.commit('setMyAddress',detailAddress)
				uni.$emit(mytype, { my:res.address.district+res.address.street, city: city,myaddress:res.address.district+res.address.street});
				// #endif
			},
			fail(err) {
				console.log(err, '获取位置失败了');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				
				if (err.errCode == -1502) {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('网络不畅，请稍后重试')
					 // #endif
				} else {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('获取定位结果错误,请确认是否开启定位权限~')
					 // #endif
					return false
				}
			}
		});
	    return true
	}else{
		// permision.gotoAppPermissionSetting()
		return false
	}
	
	
}
// 开始服务时需要更新地址
export function getLocation2(mytype) {
	if (openGps() || flag) {
		let type = platform == 'android' ? 'gcj02' : 'wgs84';
		
		// #ifndef APP-PLUS
		uni.showLoading({
			title:'获取位置中……',
		})
		// #endif
		// #ifdef APP-PLUS
			plus.nativeUI.showWaiting('获取位置中……')
		// #endif
	store.commit('setLatitude','')
	store.commit('setLongitude','')
		uni.getLocation({
			altitude: platform == 'android' ? true : true,
			type: type,
			geocode: true, //安卓需指定 type 为 gcj02 并配置三方定位SDK。h5端需要逆解析地理位置获取城市
			success: res => {
				console.log(res, '地理位置-------------');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				
	
	
				// APP端可以获取详细地址
				/* 
				 IOS端如果设置定位中：如果不授权打开精确位置，则拿不到街道street和streetNum信息。
				 */
				// #ifdef APP-PLUS
					store.commit('setStartServeLocation',{latitude: res.latitude,longitude: res.longitude})
				// #endif
			},
			fail(err) {
				console.log(err, '获取位置失败了');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				
				if (err.errCode == -1502) {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('网络不畅，请稍后重试')
					 // #endif
				} else {
					// #ifdef APP-PLUS
					permision.gotoAppPermissionSetting()
					 // #endif
					return false
				}
			}
		});
	    return true
	}else{
		permision.gotoAppPermissionSetting()
		return false
	}
}

export function getLocation(back,string='1') {
	
	console.log(flag,'flag----');
	if (openGps() || flag) {
		let type = platform == 'android' ? 'gcj02' : 'wgs84';
		
		// #ifndef APP-PLUS
		uni.showLoading({
			title:'获取位置中……',
		})
		// #endif
		// #ifdef APP-PLUS
			plus.nativeUI.showWaiting('获取位置中……')
		// #endif
	store.commit('setLatitude','')
	store.commit('setLongitude','')
		uni.getLocation({
			/* 
			 Android端altitude设置为true,要不然定位失败，
			 ios端不需要
			 */
			altitude: platform == 'android' ? true : true,
			type: type,
			geocode: true, //安卓需指定 type 为 gcj02 并配置三方定位SDK。h5端需要逆解析地理位置获取城市
			success: res => {
				console.log(res, '地理位置-------------');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				// if(string=='2'){
				// 	let my = {
						
				// 	}
				// 	uni.$emit('myAddress', { my});
				// 	return
				// }
				
				// let location = res.longitude + ',' + res.latitude; //经纬度
				store.commit('setLatitude',res.latitude)
				store.commit('setLongitude',res.longitude)
				plus.nativeUI.toast('获取定位成功！')
				
				/*
				 在选择地址页面，选择完地址需要回到上个页面,更新当前护士地址
				 */
				


				// APP端可以获取详细地址
				/* 
				 IOS端如果设置定位中：如果不授权打开精确位置，则拿不到街道street和streetNum信息。
				 */
				// #ifdef APP-PLUS
					
					let city = res.address.city; //城市
					let street=res.address.street?res.address.street:''
					let streetNum=res.address.streetNum?res.address.streetNum:''
					
					let address = res.address.district +street +streetNum //详细地址
					console.log(address,'详细地址是');
					try{
						let detailAddress=res.address.province+city+res.address.district+address //省市区具体位置(一键报警用到)
						store.commit('setAddress',address)
						store.commit('setCity',city)
						// store.commit('setDetailAddress',detailAddress)
						
						// 用户详细地址，更新护士地址用
						// store.dispatch('updateAddress',detailAddress)
						
						// if(back){
							uni.navigateBack({
								delta:1
							})
						// }
					}catch(e){
						console.log('error55555555555555555-------',e)
					}
					
				// #endif
			},
			fail(err) {
				console.log(err, '获取位置失败了');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				
				if (err.errCode == -1502) {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('网络不畅，请稍后重试')
					 // #endif
				} else {
					// 1
					// // #ifdef APP-PLUS
					// // permision.gotoAppPermissionSetting()
					// //  #endif
					return false
				}
			}
		});
	    return true
	}else{
		// permision.gotoAppPermissionSetting()
		return false
	}
}
// 护士上面获取地址
export function getLocationStartServe(back,string='1') {
	
	console.log(flag,'flag----');
	if (openGps() || flag) {
		let type = platform == 'android' ? 'gcj02' : 'wgs84';
		
		// #ifndef APP-PLUS
		uni.showLoading({
			title:'获取位置中……',
		})
		// #endif
		// #ifdef APP-PLUS
			plus.nativeUI.showWaiting('获取位置中……')
		// #endif
		store.commit('setLatitude','')
		store.commit('setLongitude','')
		uni.getLocation({
			/* 
			 Android端altitude设置为true,要不然定位失败，
			 ios端不需要
			 */
			altitude: platform == 'android' ? true : true,
			type: type,
			geocode: true, //安卓需指定 type 为 gcj02 并配置三方定位SDK。h5端需要逆解析地理位置获取城市
			success: res => {
				console.log(res, '地理位置-------------');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				/* 
				 IOS端如果设置定位中：如果不授权打开精确位置，则拿不到街道street和streetNum信息。
				 */
				// #ifdef APP-PLUS
					
					let city = res.address.city; //城市
					let address = res.address.province+city + res.address.district +street +streetNum //详细地址
					console.log(address,'详细地址是');
					// store.commit('setDetailAddress',detailAddress)
					// 用户详细地址，更新护士地址用
					store.dispatch('updateAddress',detailAddress)
					
					if(back){
						uni.navigateBack({
							delta:1
						})
					}
				// #endif
			},
			fail(err) {
				console.log(err, '获取位置失败了');
				// #ifndef APP-PLUS
						uni.hideLoading();
				// #endif
				// #ifdef APP-PLUS
						plus.nativeUI.closeWaiting()
				// #endif
				
				if (err.errCode == -1502) {
					// #ifdef APP-PLUS
					 plus.nativeUI.toast('网络不畅，请稍后重试')
					 // #endif
				} else {
					// #ifdef APP-PLUS
					permision.gotoAppPermissionSetting()
					 // #endif
					return false
				}
			}
		});
	    return true
	}else{
		permision.gotoAppPermissionSetting()
		return false
	}
}
export function openMyGps() {
	flag=false
	// 编译到非app平台返回都是true
	// #ifndef APP
	return true
	// #endif
	
	// #ifdef APP-PLUS
	if (platform == 'ios') {
		// https://ask.dcloud.net.cn/article/36020
		let cllocationManger = plus.ios.import('CLLocationManager');
		let enable = cllocationManger.locationServicesEnabled();
		let status = cllocationManger.authorizationStatus();
		if (enable && status != 2) {
			// console.log('定位开启可以获取用户位置了');
			return true
		} else {
			
						let UIApplication = plus.ios.importClass('UIApplication');
						let application2 = UIApplication.sharedApplication();
						let NSURL2 = plus.ios.importClass('NSURL');
						let setting2 = NSURL2.URLWithString('app-settings:'); // 打开应用权限
						application2.openURL(setting2);
						plus.ios.deleteObject(setting2);
						plus.ios.deleteObject(NSURL2);
						plus.ios.deleteObject(application2);
						
						 watchPositon()
			
			return false
		}
		plus.ios.deleteObject(cllocationManger);
	} else {
		let context = plus.android.importClass('android.content.Context');
		let locationManager = plus.android.importClass('android.location.LocationManager');
		let main = plus.android.runtimeMainActivity();
		let mainSvr = main.getSystemService(context.LOCATION_SERVICE);
		if (mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
			// console.log('定位开启可以获取用户位置了');
			return true
		} else {
			
						var Intent = plus.android.importClass('android.content.Intent');
						var Settings = plus.android.importClass('android.provider.Settings');
						var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
						main.startActivity(intent); // 打开系统设置GPS服务页面
						
					  watchPositon()
			
			return false
		}
	}
	// #endif
}

export function openGps() {
	flag=false
	// 编译到非app平台返回都是true
	// #ifndef APP
	return true
	// #endif
	
	// #ifdef APP-PLUS
	if (platform == 'ios') {
		// https://ask.dcloud.net.cn/article/36020
		let cllocationManger = plus.ios.import('CLLocationManager');
		let enable = cllocationManger.locationServicesEnabled();
		let status = cllocationManger.authorizationStatus();
		if (enable && status != 2) {
			// console.log('定位开启可以获取用户位置了');
			return true
		} else {
			uni.showModal({
				title: '温馨提示',
				content: '手动开启定位,以便护士小鹿为您提供更好的服务。',
				confirmText: '去设置',
				cancelText: '暂不开启',
				confirmColor: '#007AFF',
				success: function(res) {
					if (res.confirm) {
						let UIApplication = plus.ios.importClass('UIApplication');
						let application2 = UIApplication.sharedApplication();
						let NSURL2 = plus.ios.importClass('NSURL');
						let setting2 = NSURL2.URLWithString('app-settings:'); // 打开应用权限
						application2.openURL(setting2);
						plus.ios.deleteObject(setting2);
						plus.ios.deleteObject(NSURL2);
						plus.ios.deleteObject(application2);
						
						 watchPositon()
					}
				}
			})
			return false
		}
		plus.ios.deleteObject(cllocationManger);
	} else {
		let context = plus.android.importClass('android.content.Context');
		let locationManager = plus.android.importClass('android.location.LocationManager');
		let main = plus.android.runtimeMainActivity();
		let mainSvr = main.getSystemService(context.LOCATION_SERVICE);
		if (mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
			// console.log('定位开启可以获取用户位置了');
			return true
		} else {
			uni.showModal({
				title: '温馨提示',
				content: '手动开启定位,以便护士小鹿为您提供更好的服务。',
				confirmText: '去设置',
				cancelText: '暂不开启',
				confirmColor: '#007AFF',
				success: function(res) {
					if (res.confirm) {
						var Intent = plus.android.importClass('android.content.Intent');
						var Settings = plus.android.importClass('android.provider.Settings');
						var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
						main.startActivity(intent); // 打开系统设置GPS服务页面
						
					  watchPositon()
					}
				}
			})
			return false
		}
	}
	// #endif
}
// 不频繁问定位授权
export async function openGps1() {
	flag=false
	// 编译到非app平台返回都是true
	// #ifndef APP
	return true
	// #endif
	
	// #ifdef APP-PLUS
	if (platform == 'ios') {
		// https://ask.dcloud.net.cn/article/36020
		let cllocationManger = plus.ios.import('CLLocationManager');
		let enable = cllocationManger.locationServicesEnabled();
		let status = cllocationManger.authorizationStatus();
		if (enable && status != 2) {
			// console.log('定位开启可以获取用户位置了');
			return true
		} else {
			return false
		}
		plus.ios.deleteObject(cllocationManger);
	} else {
		let context = plus.android.importClass('android.content.Context');
		let locationManager = plus.android.importClass('android.location.LocationManager');
		let main = plus.android.runtimeMainActivity();
		let mainSvr = main.getSystemService(context.LOCATION_SERVICE);
		if (mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
			// console.log('定位开启可以获取用户位置了');
			return true
		} else {
			uni.showModal({
				title: '温馨提示',
				content: '手动开启定位,以便护士小鹿为您提供更好的服务。',
				confirmText: '去设置',
				cancelText: '暂不开启',
				confirmColor: '#007AFF',
				success: function(res) {
					if (res.confirm) {
						var Intent = plus.android.importClass('android.content.Intent');
						var Settings = plus.android.importClass('android.provider.Settings');
						var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
						main.startActivity(intent); // 打开系统设置GPS服务页面
						
					  watchPositon()
					}
				}
			})
			return false
		}
		
	}
	// #endif
}
// 监听定位的变化吗?
export function watchPositon(){
	// #ifdef APP-PLUS
	var watchId=plus.geolocation.watchPosition((res)=>{
	
		// console.log(res,'成功---地理位置变化是');
		plus.geolocation.clearWatch(watchId);
		flag=true
		getLocation() //更新定位
		
	},function(err){
		flag=false
		// code为2：网络定位失败
		// console.log(err,'监听地理位置变化出错了这是');
		// 关闭监听定位监听
		// plus.geolocation.clearWatch(watchId);
	})
	return flag
	
	// 页面返回取消监听也要
	// #endif

}
	//权限判断
	export async function  requestAndroid(permisionID ,msg) {
		if(uni.getSystemInfoSync().platform === 'android'){
			let result = await permision.requestAndroidPermission(permisionID)  //1以获取 0未获取 -1权限禁止
			console.log('android',result)
			if(result == -1){
				uni.showModal({
					title:'您尚未开启'+msg +'权限，是否前往开启？',
					confirmColor:'#3C8EFF',
					success(res) {
						if (res.confirm) {
							console.log(result,'群贤')
							permision.gotoAppPermissionSetting()
						} else if (res.cancel) {
						}
					}
				})
			}
		}
		// else{
		// 	let result =await permision.judgeIosPermission(permisionID)
		// 	console.log(result,'群贤')
		// 	if(!result){
		// 		uni.showToast({
		// 			icon:'none',
		// 			title:'您已禁止'+ msg + '权限，请前往手机设置开启'
		// 		})
		// 	}
		// }
	}
	// 首页需重新判断
	export async function  requestAndroid1(permisionID) {
		if(uni.getSystemInfoSync().platform === 'android'){
			
			let result = await requestAndroidPermission(permisionID)  //1以获取 0未获取 -1权限禁止
			console.log('android',result)
			return result
		}
	}
export async function judgeIosPermission(permissionID) {
		if (permissionID == "location") {
			return judgeIosPermissionLocation()
		} else if (permissionID == "camera") {
			return judgeIosPermissionCamera()
		} else if (permissionID == "photoLibrary") {
			return judgeIosPermissionPhotoLibrary()
		} else if (permissionID == "record") {
			return judgeIosPermissionRecord()
		} else if (permissionID == "push") {
			return judgeIosPermissionPush()
		} else if (permissionID == "contact") {
			return judgeIosPermissionContact()
		} else if (permissionID == "calendar") {
			return judgeIosPermissionCalendar()
		} else if (permissionID == "memo") {
			return judgeIosPermissionMemo()
		}
		return false;
	}
export async function requestAndroidPermission(permissionID) {
	return new Promise((resolve, reject) => {
		plus.android.requestPermissions(
			[permissionID], // 理论上支持多个权限同时查询，但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
			function(resultObj) {
				var result = 0;
				for (var i = 0; i < resultObj.granted.length; i++) {
					var grantedPermission = resultObj.granted[i];
					console.log('已获取的权限：' + grantedPermission);
					result = 1
				}
				for (var i = 0; i < resultObj.deniedPresent.length; i++) {
					var deniedPresentPermission = resultObj.deniedPresent[i];
					console.log('拒绝本次申请的权限：' + deniedPresentPermission);
					result = 0
					
				}
				for (var i = 0; i < resultObj.deniedAlways.length; i++) {
					var deniedAlwaysPermission = resultObj.deniedAlways[i];
					console.log('永久拒绝申请的权限：' + deniedAlwaysPermission);
					result = -1
				}
				resolve(result);
				// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
				// if (result != 1) {
				// gotoAppPermissionSetting()
				// }
			},
			function(error) {
				console.log('申请权限错误：' + error.code + " = " + error.message);
				resolve({
					code: error.code,
					message: error.message
				});
			}
		);
	});
}
